package listbyorder.access001_100.test41;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/5/31 15:06
 */
public class Solution1 {

    // 方法一： 利用额外的数组空间进行计算
    // 创建一个dp数组
    // 一次遍历nums数组
    // 将在数组长度范围之内的正整数都放到数组中
    // 然后遍历数组，如果碰到不是正数的值，则当前值就是我们要找到的值
    public int firstMissingPositive(int[] nums) {
        if (nums == null || nums.length == 0) return 1;
        int len = nums.length;
        int[] dp = new int[len];
        for (int i = 0; i < len; i++) {
            if (nums[i] > 0 && nums[i] <= len) {
                dp[nums[i] - 1] = nums[i];
            }
        }
        for (int i = 0; i < dp.length; i++) {
            if (dp[i] == 0) {
                return i + 1;
            }
        }
        return len + 1;
    }
}
